package com.cmc.cloud.cmclink.doc.service.si;

import java.util.Collection;
import java.util.List;

import javax.validation.Valid;

import com.cmc.cloud.cmclink.doc.entity.BlnoVslvoyDO;
import com.cmc.cloud.cmclink.doc.vo.blnovo.BlnoTransferVO;
import com.cmc.cloud.cmclink.doc.vo.blnovslvoyvo.BlnoVslvoyCreateReqVO;
import com.cmc.cloud.cmclink.doc.vo.blnovslvoyvo.BlnoVslvoyPageReqVO;
import com.cmc.cloud.cmclink.doc.vo.blnovslvoyvo.BlnoVslvoyUpdateReqVO;
import com.cmes.framework.common.pojo.PageResult;

/**
 * 提单航线船期信息 Service 接口
 *
 * @author 集运管理员
 */
public interface BlnoVslvoyService {

    /**
     * 创建提单航线船期信息
     *
     * @param createReqVO 创建信息
     */
    void createBlnoVslvoy(@Valid BlnoVslvoyCreateReqVO createReqVO);

    /**
     * 更新提单航线船期信息
     *
     * @param updateReqVO 更新信息
     */
    void updateBlnoVslvoy(@Valid BlnoVslvoyUpdateReqVO updateReqVO);

    /**
     * 删除提单航线船期信息
     *
     * @param id 编号
     */
    void deleteBlnoVslvoy(Long id);
    /**
     * 删除提单blnoId航线船期信息
     *
     * @param blnoId 编号
     */
    void deleteBlnoVslvoyByblnoId(Long blnoId);

    /**
     * 获得提单航线船期信息
     *
     * @param id 编号
     * @return 提单航线船期信息
     */
    BlnoVslvoyDO getBlnoVslvoy(Long id);

    /**
     * 获得提单航线船期信息列表
     *
     * @param id blnoId
     * @return 提单航线船期信息
     */
    List<BlnoVslvoyDO> getBlnoVslvoyBySiId(Long id);

    /**
     * 获得提单航线船期信息列表
     *
     * @param ids ids
     * @return 提单航线船期信息
     */
    List<BlnoVslvoyDO> getBlnoVslvoyBySiIdList(Collection<Long> ids);

    /**
     * 获得提单航线船期信息列表
     *
     * @param ids 编号
     * @return 提单航线船期信息列表
     */
    List<BlnoVslvoyDO> getBlnoVslvoyList(Collection<Long> ids);

    /**
     * 获得提单航线船期信息分页
     *
     * @param pageReqVO 分页查询
     * @return 提单航线船期信息分页
     */
    PageResult<BlnoVslvoyDO> getBlnoVslvoyPage(BlnoVslvoyPageReqVO pageReqVO);

    /**
     * 创建 修改 删除 si航次路径
     *
     * @param blnoId
     * @param newList 修改
     * @param oldList 原信息
     */
    void createOrUpdateAndDeleteBatch(Long blnoId, List<BlnoVslvoyUpdateReqVO> newList, List<BlnoVslvoyUpdateReqVO> oldList);

    /**
     * getBlnoVslvoyInfo
     * @param id
     * @return
     */
    List<BlnoVslvoyDO> getBlnoVslvoyInfo(Long id);

    /**
     * 更新中转船名航次
     * @param updateReqVO req
     */
    void updateBlnoVslvoyTrans(BlnoTransferVO updateReqVO);

    /**
     * 回显要更改的中转船名航次
     * @param reqVO req
     * @return BlnoVslvoyDO
     */
    BlnoVslvoyDO showBlnoVslvoy(@Valid BlnoTransferVO reqVO);
}
